home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / comm / mail / Mutt089src.lha / Mutt-0.89i-AMIGA / src / rx / inst-rxposix.h < prev    next >
C/C++ Source or Header  |  1998-01-28  |  5KB  |  156 lines

  1. /* classes: h_files */
  2.  
  3. #ifndef INST_RXPOSIXH
  4. #define INST_RXPOSIXH
  5. /*    Copyright (C) 1995, 1996 Tom Lord
  6.  * 
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU Library General Public License as published by
  9.  * the Free Software Foundation; either version 2, or (at your option)
  10.  * any later version.
  11.  * 
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU Library General Public License for more details.
  16.  * 
  17.  * You should have received a copy of the GNU Library General Public License
  18.  * along with this software; see the file COPYING.  If not, write to
  19.  * the Free Software Foundation, 59 Temple Place - Suite 330, 
  20.  * Boston, MA 02111-1307, USA. 
  21.  */
  22.  
  23.  
  24.  
  25. struct rx_posix_regex
  26. {
  27.   struct rexp_node * pattern;
  28.   struct rexp_node ** subexps;
  29.   size_t re_nsub;
  30.   unsigned char * translate;
  31.   unsigned int newline_anchor:1;/* If true, an anchor at a newline matches.*/
  32.   unsigned int no_sub:1;    /* If set, don't  return register offsets. */
  33.   unsigned int is_anchored:1;
  34.   unsigned int is_nullable:1;
  35.   unsigned char fastmap[256];
  36.   void * owner_data;
  37. };
  38.  
  39. typedef struct rx_posix_regex regex_t;
  40.  
  41. /* Type for byte offsets within the string.  POSIX mandates this.  */
  42. typedef int regoff_t;
  43.  
  44. typedef struct rx_registers
  45. {
  46.   regoff_t rm_so;          /* Byte offset from string's start to substring's start.  */
  47.   regoff_t rm_eo;          /* Byte offset from string's start to substring's end.  */
  48.   regoff_t final_tag;        /* data from the cut operator (only pmatch[0]) */
  49. } regmatch_t;
  50.  
  51.  
  52.  
  53. /* If any error codes are removed, changed, or added, update the
  54.  * `rx_error_msg' table.
  55.  */
  56. #define REG_NOERROR    0        /* Success.  */
  57. #define REG_NOMATCH    1        /* Didn't find a match (for regexec).  */
  58.  
  59. /* POSIX regcomp return error codes.  
  60.  * (In the order listed in the standard.)  
  61.  */
  62. #define REG_BADPAT    2        /* Invalid pattern.  */
  63. #define REG_ECOLLATE    3        /* Not implemented.  */
  64. #define REG_ECTYPE    4        /* Invalid character class name.  */
  65. #define REG_EESCAPE    5        /* Trailing backslash.  */
  66. #define REG_ESUBREG    6        /* Invalid back reference.  */
  67. #define REG_EBRACK    7        /* Unmatched left bracket.  */
  68. #define REG_EPAREN    8        /* Parenthesis imbalance.  */ 
  69. #define REG_EBRACE    9        /* Unmatched \{.  */
  70. #define REG_BADBR    10        /* Invalid contents of \{\}.  */
  71. #define REG_ERANGE    11        /* Invalid range end.  */
  72. #define REG_ESPACE    12        /* Ran out of memory.  */
  73. #define REG_BADRPT    13        /* No preceding re for repetition op.  */
  74.  
  75. /* Error codes we've added.  
  76.  */
  77. #define REG_EEND    14        /* Premature end.  */
  78. #define REG_ESIZE    15        /* Compiled pattern bigger than 2^16 bytes.  */
  79. #define REG_ERPAREN    16        /* Unmatched ) or \); not returned from regcomp.  */
  80.  
  81.  
  82. /*
  83.  * POSIX `cflags' bits (i.e., information for `regcomp').
  84.  */
  85.  
  86. /* If this bit is set, then use extended regular expression syntax.
  87.  * If not set, then use basic regular expression syntax.  
  88.  */
  89. #define REG_EXTENDED 1
  90.  
  91. /* If this bit is set, then ignore case when matching.
  92.  * If not set, then case is significant.
  93.  */
  94. #define REG_ICASE (REG_EXTENDED << 1)
  95.  
  96. /* If this bit is set, then anchors do not match at newline
  97.  *   characters in the string.
  98.  * If not set, then anchors do match at newlines.  
  99.  */
  100. #define REG_NEWLINE (REG_ICASE << 1)
  101.  
  102. /* If this bit is set, then report only success or fail in regexec.
  103.  * If not set, then returns differ between not matching and errors.  
  104.  */
  105. #define REG_NOSUB (REG_NEWLINE << 1)
  106.  
  107.  
  108. /*
  109.  * POSIX `eflags' bits (i.e., information for regexec).  
  110.  */
  111.  
  112. /* If this bit is set, then the beginning-of-line operator doesn't match
  113.  *   the beginning of the string (presumably because it's not the
  114.  *   beginning of a line).
  115.  * If not set, then the beginning-of-line operator does match the
  116.  *   beginning of the string.  
  117.  */
  118. #define REG_NOTBOL 1
  119.  
  120. /* Like REG_NOTBOL, except for the end-of-line.  
  121.  */
  122. #define REG_NOTEOL (REG_NOTBOL << 1)
  123.  
  124. /* For regnexec only.  Allocate register storage and return that. */
  125. #define REG_ALLOC_REGS (REG_NOTEOL << 1)
  126.  
  127.  
  128. #ifdef __STDC__
  129. extern int regncomp (regex_t * preg,
  130.              const char * pattern, int len,
  131.              int cflags);
  132. extern int regcomp (regex_t * preg, const char * pattern, int cflags);
  133. extern size_t regerror (int errcode,
  134.             const regex_t *preg,
  135.             char *errbuf, size_t errbuf_size);
  136. extern int regnexec (const regex_t *preg,
  137.              const char *string, int len,
  138.              size_t nmatch, regmatch_t **pmatch,
  139.              int eflags);
  140. extern int regexec (const regex_t *preg,
  141.             const char *string,
  142.             size_t nmatch, regmatch_t pmatch[],
  143.             int eflags);
  144. extern void regfree (regex_t *preg);
  145.  
  146. #else /* STDC */
  147. extern int regncomp ();
  148. extern int regcomp ();
  149. extern size_t regerror ();
  150. extern int regnexec ();
  151. extern int regexec ();
  152. extern void regfree ();
  153.  
  154. #endif /* STDC */
  155. #endif  /* INST_RXPOSIXH */
  156.